<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>

    // Promise的优点:
    // 有了Promise对象，就可以将异步操作以同步操作的流程表达出来，避免了层层嵌套的回调函数

    // Promise实例 的拓展方法:
    // Promise.prototype.then   then()为 Promise 实例添加状态改变时的回调函数  => 方法可以指定两个函数作为参数(回调函数)   =>  提前指定了Promise状态改变时要执行的回调函数
    // callback1  => 当Promise对象由pending(进行中)改为fulfilled(已成功)时,会执行此回调函数
    // callback2  => 当Promise对象由pending(进行中)改为rejected(已失败)时,会执行此回调函数
    // callback1(arg) callback2(arg) 都有一个形参, 用于接收Promise实例中存储的数据
    
    // 返回值: 新的Promise对象


    // Promise.prototype.catch
    
    // Promise.prototype.finally
    

    // debugger;
    var p = new Promise(function(resolve,reject){
        //  回调函数 => 容器 => 用于存放要执行的代码(通常是异步代码,同步也可以)
        // 当前函数数据同步任务 -> new Promise() 传入函数时立即执行
        // setTimeout(()=>{  // 2s后改变状态
        //     // debugger;
        //     var num = Math.random(); // 0-1
        //     console.log(num);

        //     if(num >= 0.5){ // 正面 => 不拖堂
        //         resolve(true);
        //     }else{ // 反面 => 拖堂
        //         reject(false);
        //     }
        //     console.log(p);
        // },3000);
    });
    console.log(p);   // {<pending>:undefined}

    // p.then(callback1,callback2)  => then()为 Promise 实例添加状态改变时的回调函数  => 方法可以指定两个函数作为参数(回调函数)   =>  提前指定了Promise状态改变时要执行的回调函数
    // callback1  => 当Promise对象由pending(进行中)改为fulfilled(已成功)时,会执行此回调函数
    // callback2  => 当Promise对象由pending(进行中)改为rejected(已失败)时,会执行此回调函数
    // callback1(arg) callback2(arg) 都有一个形参, 用于接收Promise实例中存储的数据

    // then()方法先于异步代码执行, 提前指定了Promise状态改变时要执行的回调函数 => 等异步代码启动,Promise对象状态改变之后执行 
    p.then(function(arg){
        // debugger;
        console.log("老王说: 不拖堂!",arg);
    },function(arg){
        // debugger;
        console.log("老王说: 该拖还要拖!",arg);
    })


</script>
</html>